package com.atguigu.gmall.order.Service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @program: gmall-parent
 * @author: Mr.Zhuo
 * @create: 2022-04-16 15:03
 **/
public interface OrderInfoService extends IService<OrderInfo> {

    // 保存订单
    Long saveOrder(OrderInfo orderInfo);

    // 生成一个随机的tradeNo 并保存在redis
    String getTradeNo(String userId);

    // 比较tradeNo
    Boolean compareTradeNo(String tradeNo, String userId);

    // 删除对应用户的tradeNo
    void delTradeNo(String userId);

    // 调用库存管理系统
    Boolean checkStock(Long skuId, Integer skuNum);

    // 查询我的订单
    IPage<OrderInfo> indexOrderInfo(Page<OrderInfo> orderInfoPage, String userId);

    // 进行修改数据信息
    void execExpiredOrder(Long orderId);

    // 取消订单,当如果当前订单超过24个小时不支付，我们将进行订单取消
     void updateOrderStatus(Long orderId, ProcessStatus processStatus);


    // 根据订单id获取数据
    OrderInfo getOrderInfo(Long orderId);


    /**
     *将orderInfo变为map集合
     * @param orderInfo
     */
    Map initWareOrder(OrderInfo orderInfo);

    // 给仓库发送订单已支付，请发货
    void sendOrderStatus(Long orderId);

    // 拆单
    List<OrderInfo> splitOrder(String orderId, String wareSkuMap);

    // 关闭订单
    void execExpiredOrder(Long orderId, String s);
}
